package myou.model;

import myou.classes.Usuario;
/**
 * Projeto Myou - Disciplina: Sistemas de Informação I
 * Classe que executa a interface com o usuário (MyouUI)
 * @author Ronycley Gonçalves Agra
 * @version 1.00
 * @since Milestone 2 17/10/2011
 * Interface Gerente que provê os metodos que executam a
 * ação enviada pela pelo usuário através do contralador para o 
 * módulo "Usuários"
 */
public class GerenteUsuarios implements Gerente {

	private static Gerente instance = null;
	private Repositorio repositorio = null;
	
	/**
	 * Construtor com acesso protected para uso do método getInstance (Singleton)
	 * @throws Exception
	 */
	protected GerenteUsuarios(){

	}
	
	/**
	 * Método que retorna uma instancia única da classe
	 * @return Gerente Retorna um Gerente de acordo com o módulo especificado
	 * @throws Exception
	 */
	public synchronized static Gerente getInstance() throws Exception{
		try{
			if(instance == null){
				instance = new GerenteUsuarios();
			}
			return instance;
		}catch(Exception e){
			throw new Exception(e.getMessage());
		}
	}
	
	/**
	 * Retorna
	 * @return the repositorio
	 */
	public Repositorio getRepositorio() {
		return repositorio;
	}

	/**
	 * @param repositorio
	 */
	@Override
	public void setRepositorio(Repositorio repositorio){
		this.repositorio = repositorio;
	}
	/**
	 * Cria usuários no sistema
	 * 
	 * @param login
	 *            O login do usuário
	 * @param nome
	 *            O nome do usuário
	 * @param endereco
	 *            O endereço do usuário
	 * @throws Exception
	 *             Lança exceção caso o nome ou login sejam nulos ou brancos ou
	 *             já exista algum usuário com o login informado,
	 */
	public void criarUsuario(String login, String nome, String endereco)
			throws Exception {
		if (login == null || login.equals("")) {
			throw new Exception("Login inválido");
		}
		if (nome == null || nome.equals("")) {
			throw new Exception("Nome inválido");
		}
		if(this.getRepositorio().existe(login)){
			throw new Exception("Já existe um usuário com este login");
		}
		/*
		Iterator<Usuario> it = this.usuarios.iterator();
		while (it.hasNext()) {
			Usuario usuario = it.next();
			if (usuario.getLogin().equals(login)) {
				throw new Exception("Já existe um usuário com este login");
			}
		}
		*/
		Usuario usuario = new Usuario(login, nome, endereco);
		this.getRepositorio().adicionar(usuario);
		//this.usuarios.add(usuario);
		//this.mapaEmprestimos.put(usuario.getLogin(), new Integer(0));
	}
}
